workspace(name = "pip_repository_annotations_example")

local_repository(
    name = "rules_python",
    path = "../..",
)

load("@rules_python//python:repositories.bzl", "py_repositories", "python_register_toolchains")

py_repositories()

python_register_toolchains(
    name = "python39",
    python_version = "3.9",
)

load("@rules_python//python:pip.bzl", "package_annotation", "pip_parse")

# Here we can see an example of annotations being applied to an arbitrary
# package. For details on `package_annotation` and it's uses, see the
# docs at @rules_python//docs:pip.md`.
ANNOTATIONS = {
    # This annotation verifies that annotations work correctly for pip packages with extras
    # specified, in this case requests[security].
    "requests": package_annotation(
        additive_build_content = """\
load("@bazel_skylib//rules:write_file.bzl", "write_file")
write_file(
    name = "generated_file",
    out = "generated_file.txt",
    content = ["Hello world from requests"],
)
""",
        data = [":generated_file"],
    ),
    "wheel": package_annotation(
        additive_build_content = """\
load("@bazel_skylib//rules:write_file.bzl", "write_file")
write_file(
    name = "generated_file",
    out = "generated_file.txt",
    content = ["Hello world from build content file"],
)
""",
        copy_executables = {"@pip_repository_annotations_example//:data/copy_executable.py": "copied_content/executable.py"},
        copy_files = {"@pip_repository_annotations_example//:data/copy_file.txt": "copied_content/file.txt"},
        data = [":generated_file"],
        data_exclude_glob = ["site-packages/*.dist-info/WHEEL"],
    ),
}

# For a more thorough example of `pip_parse`. See `@rules_python//examples/pip_parse`
pip_parse(
    name = "pip",
    annotations = ANNOTATIONS,
    python_interpreter_target = "@python39_host//:python",
    requirements_lock = "//:requirements.txt",
)

load("@pip//:requirements.bzl", "install_deps")

install_deps()
